package xmlaufgabe2;

import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JPanel;

/**
 * Panel zur Darstellung des gewaehlten Aphorismus, der Hintergrund- und
 * Schriftfarben, sowie Schriftarten, -stile und -groessen.
 *
 * @author Adrian Cieluch
 * @version 1.0, 10/27/11
 */
public class StringPanel extends JPanel {
    /**
     * Speichert den anzuzeigenden Aphorismus
     */
    private String aphorism;
    /**
     * Speichert die Schriftfarbe
     */
    private Color fontColor;
    /**
     * Speichert die Hintergrundfarbe
     */
    private Color backgroundColor;
    
    /**
     * Setzt Standard-Schrift
     */
    public StringPanel() {
        fontColor = Color.white;
        backgroundColor = Color.black;

        this.setFont(new Font("Verdana", Font.PLAIN, 10));
    }
    
    /**
     * Setzt den anzuzeigenden Aphorismus
     * 
     * @param s Aphorismus
     */
    public void setAphorism(String s) {
        aphorism = s;
    }
    
    /**
     * Setzt die Schriftfarbe
     * 
     * @param c Schriftfarbe
     */
    public void setFontColor(Color c) {
        fontColor = c;
    }
    
    /**
     * Setzt die Hintergrundfarbe
     * 
     * @param c Hintergrundfarbe
     */
    public void setBackgroundColor(Color c) {
        backgroundColor = c;
    }
    
    /**
     * Generiert aus dem Aphorismus-String die anzuzeigenden Unterstrings und
     * positioniert sie mittig auf dem Panel
     * 
     * @param g Grafikkontext
     */
    public void generateAndAlignText(Graphics2D g) {
        String[] parts = aphorism.split(System.getProperty("line.separator"));
        FontMetrics fm = g.getFontMetrics();
        Rectangle2D texts = fm.getStringBounds(aphorism, g);

        int x;
        int y = (int)((this.getHeight() - texts.getHeight() * parts.length) / 2 + fm.getAscent());;
        int heightCounter = 15;
        int verticalGap = 6;
        
        for (String part : parts) {
            Rectangle2D textsize = fm.getStringBounds(part, g);
            x = (int)((this.getWidth() - textsize.getWidth()) / 2);
            
            g.drawString(part, x, y);
            y += heightCounter + verticalGap;
            heightCounter += fm.getHeight() + verticalGap;
        }
    }
    
    /**
     * Zeichnet den String auf das Panel
     * 
     * @param g Grafikkontext
     */
    public void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D)g;
        
        g.setColor(backgroundColor);
        g.fillRect(0, 0, this.getWidth(), this.getHeight());
        
        //Draw Text
        g2d.setColor(fontColor);
        g2d.setFont(this.getFont());
        generateAndAlignText(g2d);
    }
}
